#pragma once
#include <graphics.h>
#include <iostream>
#include <string>
#include <vector>
#include <windows.h>

// 定义按钮点击回调函数类型
typedef void (*ButtonClickCallback)(void);

// 定义 UI 元素基类
class UIElement {
public:
    int x, y;
    int width, height;
    std::string text;
    bool visible = true;
    int fontSize = 20;  // 字体大小
    COLORREF textColor = BLACK;  // 文本颜色
    COLORREF fillColor = LIGHTGRAY;  // 填充颜色
    std::string fontName = "宋体";  // 字体名称

    UIElement(int xPos, int yPos, int w, int h, const std::string& txt);
    virtual void draw() = 0;
    virtual bool isClicked(int mouseX, int mouseY);

    // 设置字体大小的方法
    void setFontSize(int size) {
        fontSize = size;
    }

    // 设置文本颜色的方法
    void setTextColor(COLORREF color) {
        textColor = color;
    }

    // 设置填充颜色的方法
    void setFillColor(COLORREF color) {
        fillColor = color;
    }

    // 设置字体名称的方法
    void setFontName(const std::string& name) {
        fontName = name;
    }
};

// 按钮类，继承自 UIElement
class Button : public UIElement {
public:
    ButtonClickCallback clickCallback = nullptr;  // 点击回调函数

    using UIElement::UIElement;
    void draw() override;
    void setClickCallback(ButtonClickCallback callback) {
        clickCallback = callback;
    }
};

// 文本框类，继承自 UIElement
class TextBox : public UIElement {
public:
    using UIElement::UIElement;
    void draw() override;
};

// UI 布局管理类
class UILayoutManager {
private:
    std::vector<UIElement*> elements;

public:
    void addElement(UIElement* element);
    void drawAll();
    UIElement* getClickedElement(int mouseX, int mouseY);
};

// UI 事件处理类
class UIEventHandler {
private:
    UILayoutManager& layoutManager;

public:
    UIEventHandler(UILayoutManager& manager);
    void handleMouseClick(int mouseX, int mouseY);
};